/*
 * @Author: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @Date: 2025-07-28 14:44:57
 * @LastEditors: error: error: git config user.name & please set dead value or install git && error: git config user.email & please set dead value or install git & please set dead value or install git
 * @LastEditTime: 2025-07-30 11:48:05
 * @FilePath: /yyshort/lib/pages/search_result/controller.dart
 * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
 */
import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:pull_to_refresh/pull_to_refresh.dart';
import 'package:yyshort/common/apis/video_api.dart';
import 'package:yyshort/common/model/video_model.dart';

import 'index.dart';

class SearchResultController extends GetxController {
  SearchResultController();

  final state = SearchResultState();
  // 搜索输入控制器
  final TextEditingController searchController = TextEditingController();

  // 焦点控制器，用于管理键盘显示/隐藏
  final FocusNode focusNode = FocusNode();

  /// UI 组件
  final RefreshController refreshController = RefreshController(
    initialRefresh: false,
  );

  // 搜索请求
  String searchStr = '';
  int curPage = 1;
  int total = 10;
  // tap
  void handleTap(int index) {
    // Get.snackbar(
    //   "标题",
    //   "消息",
    // );
  }

  void onRefresh() {
    fetchNewsList(isRefresh: true)
        .then((_) {
          refreshController.refreshCompleted(resetFooterState: true);
        })
        .catchError((_) {
          refreshController.refreshFailed();
        });
  }

  void onLoading() {
    fetchNewsList()
        .then((_) {
          if (state.resultList.length < total * curPage) {
            refreshController.loadNoData();
          } else {
            refreshController.loadComplete();
          }
        })
        .catchError((_) {
          refreshController.loadFailed();
        });
  }

  Future<void> fetchNewsList({bool isRefresh = false}) async {
    if (isRefresh == true) {
      curPage = 1;
    } else {
      curPage++;
    }
    List<VideoModel> result = await VideoAPI.search(
      searchStr,
      (curPage).toString(),
    );
    // 网络请求完成后，根据需要清空列表
    if (isRefresh == true) {
      state.resultList.clear();
    }
    state.resultList.addAll(result);
  }

  /// 在 widget 内存中分配后立即调用。
  @override
  void onInit() {
    super.onInit();
    print("SearchResultController 已初始化"); // 检查控制台是否输出

    // 可以在这里初始化搜索内容，比如从路由参数获取
    final String? initialQuery = Get.arguments?['query'];
    if (initialQuery != null && initialQuery.isNotEmpty) {
      searchController.text = initialQuery;
    }
  }

  void foryouRequest() {
    VideoAPI.for_you_videos().then((value) {
      state.foryouList.assignAll(value); // ✅
    });
  }

  /// 在 onInit() 之后调用 1 帧。这是进入的理想场所
  @override
  void onReady() {
    super.onReady();
    foryouRequest();
  }

  /// 在 [onDelete] 方法之前调用。
  @override
  void onClose() {
    // 释放资源，防止内存泄漏
    searchController.dispose();
    focusNode.dispose();
    super.onClose();
  }

  // 清空搜索输入
  void clearSearchText() {
    searchController.clear();
    update(); // 通知UI更新
  }

  // 提交搜索
  void submitSearch(String query) {
    // 收起键盘
    focusNode.unfocus();
    // 这里可以添加搜索逻辑
    print("搜索内容: $query");
    // 可以在这里调用API进行搜索
    if (query != '') {
      state.isSearch.value = true;
      searchStr = query;
      onRefresh();
    } else {
      state.isSearch.value = false;
    }
  }

  /// dispose 释放内存
  @override
  void dispose() {
    super.dispose();
    refreshController.dispose();
  }
}
